package com.welink.cmp.meatdata.command;

import com.welink.cmp.dao.metadata.VpcDaoService;
import com.welink.cmp.dao.metadata.dataobject.VpcDO;
import com.welink.cmp.dto.metadata.MetadataIdListQry;
import com.welink.cmp.dto.metadata.vpc.*;
import com.welink.common.dto.PageResponse;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;
import java.util.stream.Collectors;

/**
 * VPC命令执行类
 * 负责处理VPC相关的业务逻辑和数据操作
 */
@Component
public class VpcCmdExe {

    @Autowired
    private VpcDaoService vpcDaoService;

    /**
     * 保存VPC信息
     *
     * @param addCmd 添加VPC的命令对象
     * @return 新增VPC的ID
     */
    public Long save(CreateVpcAddCmd addCmd) {
        VpcDO vpcDO = new VpcDO();
        BeanUtils.copyProperties(addCmd, vpcDO);
        if (addCmd.isNeedsOperator()) {
            vpcDO.setCreateBy(addCmd.getOperator());
        }
        vpcDaoService.save(vpcDO);
        return vpcDO.getId();
    }


    /**
     * 根据ID查询VPC信息
     *
     * @param id VPC ID
     * @return VPC业务对象
     */
    public VpcCO queryById(Long id) {
        VpcDO vpcDO = vpcDaoService.getById(id);
        VpcCO vpcCO = new VpcCO();
        BeanUtils.copyProperties(vpcDO, vpcCO);
        return vpcCO;
    }

    /**
     * 列表查询VPC信息
     *
     * @param listQry 列表查询条件
     * @return VPC业务对象列表
     */
    public List<VpcCO> listQuery(MetadataIdListQry listQry) {
        LambdaQueryWrapper<VpcDO> wrapper = new LambdaQueryWrapper<>();
        // 根据列表查询条件设置查询条件
        List<VpcDO> vpcDOList = vpcDaoService.list(wrapper);
        return vpcDOList.stream().map(vpcDO -> {
            VpcCO vpcCO = new VpcCO();
            BeanUtils.copyProperties(vpcDO, vpcCO);
            return vpcCO;
        }).collect(Collectors.toList());
    }

    /**
     * 分页查询VPC信息
     *
     * @param pageQry 分页查询条件
     * @return 分页响应，包括VPC列表和分页信息
     */
    public Page<VpcDO> pageQuery(VpcListByPageQry pageQry) {
        return vpcDaoService.pageQry(pageQry);
    }
}